package com.etalk.crm.dao;

import com.etalk.crm.pojo.FormalOrderInfo;
import com.etalk.crm.pojo.KcOrders;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * @Author Terwer
 * @Date 2018/11/13 11:39
 * @Version 1.0
 * @Description 订单
 **/
@Mapper
public interface KcOrdersMapper {
    /**
     * 根据订单ID查询订单
     *
     * @param orderId
     * @return
     */
    KcOrders selectByOrderId(String orderId);

    /**
     * 添加订单
     *
     * @param record
     * @return
     */
    int insertOrder(KcOrders record);

    /**
     * 获取学员有效订单最后一个过期日期
     *
     * @param personId
     * @return
     */
    Date getLastOutdate(Integer personId);

    /**
     * 学员信息卡查询订单信息
     * @param personId 学员id
     * @return 订单信息
     */
    List<KcOrders> selectOrderListByPersonId(@Param("personId") Integer personId);

    /**
     * 学员信息卡查询订单信息
     * @param personId 学员id
     * @return 订单信息
     */
    List<KcOrders> selectAvailableOrderListByPersonId(@Param("personId") Integer personId);

    /**
     * 获取默认可用的中教套餐
     *
     * @param personId 用户ID
     * @return 可用的中教套餐
     */
    KcOrders selectAvailableOrder(Integer personId);

    /**
     * 查询可用订单
     * @param personId
     * @return
     */
    List<KcOrders> selectTradeOrderMaterialByPersonId(@Param("personId") int personId,@Param("weekId") Integer weekId,@Param("orderId") String orderId);

    /**
     * 更新购买时间
     * @param orderId 订单id
     * @param newBuyTime 新的购买时间
     * @return
     */
    int updateBuyTime(@Param("orderId") String orderId, @Param("newBuyTime")Date newBuyTime);

    /**
     * 终止或废除订单
     * @param orderId 订单id
     * @param personId 学员id
     * @param remark 终止或废除订单原因
     * @return 记录数
     */
    int updateStateByOrderId(@Param("orderId") String orderId, @Param("personId")int personId,@Param("remark")String remark);

    /**
     * 查询拆分或赠送的订单信息
     * @param orderId 订单id
     * @return 订单信息
     */
    KcOrders selectOrderSplitGiftByOrderId(@Param("orderId") String orderId);

    /**
     * 修改订单课时币数量
     * @param orderId 订单id
     * @param lessonCount 订单课时/币总数量
     * @param buyCount 订单课时/币购买数量
     * @param gift 订单课时/币赠送数量
     * @param remark 备注说明
     * @return 记录数
     */
    int updateClassCountById(@Param("orderId") String orderId,@Param("lessonCount") int lessonCount,@Param("buyCount") int buyCount,@Param("gift") int gift,@Param("remark") String remark);

    /**
     * 添加拆分或赠送订单
     * @param orderId 拆分订单id
     * @param newOrderId 新订单id
     * @param gift 拆分数量
     * @param personId 用户id
     * @param loginName 用户登录名
     * @param remark 备注说明
     * @return 记录数
     */
    int insertKcOrderByOrderId(@Param("orderId") String orderId,@Param("newOrderId") String newOrderId,@Param("gift") int gift,@Param("orderBookId") int orderBookId,
                               @Param("personId") int personId,@Param("loginName") String loginName,@Param("remark") String remark);

    /**
     * 查询id是否存在
     * @param orderId 订单id
     * @return 记录数
     */
    int countById(@Param("orderId") String orderId);

    /**
     * f返还订单课时
     * @param orderId 订单id
     * @param subClass 返还课时币
     * @return 记录数
     */
    int updateLearnedClassSubByOrderId(@Param("orderId") String orderId,@Param("subClass") BigDecimal subClass);

    /**
     * 查询订单教材列表
     * @param sscId ssc id
     * @param record 查询条件
     * @return
     */
    List<FormalOrderInfo> selectFormalOrderInfoBySscId(@Param("sscId")Integer sscId,@Param("record") FormalOrderInfo record);

    /**
     * 查询ssc名下学员正式有效订单在学教材
     * @param sscId ssc id
     * @return
     */
    List<FormalOrderInfo> selectFormalTextbookBySscId(@Param("sscId")Integer sscId);
}
